home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 April / EnigmA AMIGA RUN 17 (1997)(G.R. Edizioni)(IT)[!][issue 1997-04][EAR-CD].iso / EARCD / text / hyper / hsc_source.lha / hsc / source / ugly / dllist.h < prev    next >
C/C++ Source or Header  |  1996-09-12  |  2KB  |  82 lines

  1. #ifndef UGLY_DLLIST_H
  2. #define UGLY_DLLIST_H           /* avoid include twice */
  3.  
  4. /*
  5.  * dllist.h
  6.  *
  7.  * doubel linked list functions, header
  8.  *
  9.  * (W) by Tommy-Saftwörx in 1994,95
  10.  *
  11.  */
  12.  
  13. #include <stdio.h>
  14.  
  15. #include "utypes.h"
  16.  
  17. /*
  18.  *
  19.  * double linked list structs
  20.  *
  21.  */
  22. struct dlnode
  23. {
  24.     struct dlnode *prev;        /* previous entry */
  25.     struct dlnode *next;        /* next entry */
  26.     APTR data;                  /* ptr to data */
  27. };
  28.  
  29. struct dllist
  30. {                               /* PRIVATE (read-only) */
  31.     struct dlnode *first;       /*   first entry */
  32.     struct dlnode *last;        /*   last entry */
  33.     LONG entry_num;             /*   num of entris in list */
  34.     void (*del_data) (APTR data);       /*   func that removes data */
  35.     /* PUBLIC */
  36.     APTR user_data;             /*   user data */
  37. };
  38.  
  39. typedef struct dllist DLLIST;
  40. typedef struct dlnode DLNODE;
  41.  
  42. /*
  43.  * access methodes
  44.  */
  45. #define dll_first( list ) (list)->first
  46. #define dll_last( list )  (list)->last
  47. #define dln_prev( node )  (node)->prev
  48. #define dln_next( node )  (node)->next
  49. #define dln_data( node )  (node)->data
  50.  
  51. /*
  52.  *
  53.  * external functions prototypes
  54.  *
  55.  */
  56. #ifndef NOEXTERN_UGLY_DLLIST_H
  57.  
  58. extern DLLIST *init_dllist(void (*del_data) (APTR data));
  59. extern DLNODE *new_dlnode(void);
  60. extern DLNODE *ins_dlnode(
  61.                        DLLIST *list, DLNODE *node, APTR data);
  62. extern DLNODE *app_dlnode(DLLIST *list, APTR data);
  63.  
  64. extern APTR detach_dlnode(DLLIST *list, DLNODE *node);
  65. extern void del_dlnode(DLLIST *list, DLNODE *node);
  66. extern VOID del_all_dlnodes(DLLIST *list);
  67. extern void del_dllist(DLLIST *list);
  68.  
  69. extern BOOL empty_dllist(DLNODE *list);
  70.  
  71. extern void fprintf_dllist(FILE * stream, DLLIST *list,
  72.                            void (*fprintf_data) (FILE * stream, APTR data));
  73. extern void do_dllist(DLLIST * list, void (*func) (APTR data));
  74.  
  75. extern DLNODE *find_dlnode(DLNODE *start, APTR data,
  76.                             int (*compare) (APTR cmp_data, APTR list_data));
  77.  
  78. #endif /* NOEXTERN_UGLY_DLLIST_H */
  79.  
  80. #endif /* UGLY_DLLIST_H */
  81.  
  82.